<template>
    <!-- <teleport></teleport> 内置组价：瞬间移动 
        是一个内置组件，它可以将一个组件内部的一部分模板到该组件的DOM质结构外层的位置去。也就是说，<Teleport>标签主要的作用是解决视图之间的层级关系的。
        运用场景：可以在弹窗的案例中使用
    -->
  <teleport to="body">
    <div class="bg-model" v-show="isShow">
        <div class="tip-model">
            <div class="header">
                <h1 :class="['title', modelType]">
                    <slot name="title">This is Default!</slot>
                </h1>
                <button class="close-btn" @click="closeTip">x</button>
            </div>
            <div class="content">
                <slot name="default"></slot>
            </div>
        </div>
    </div>
  </teleport>
</template>

<script>
export default {
    name: 'BaseModel',
    props: {
        modelType: {
            type: String,
            default:'success'
        }
    },
    data() {
        return {
            isShow: true
        }
    },
    methods: {
        closeTip() {
            this.isShow = false;
        },
        openTip() {
            this.isShow = true;
        }
    }
}
</script>

<style lang="scss">
html {
    position: relative;
}
.bg-model {
    position: absolute;
    top: 0;
    right: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0,0,0,.6);
    overflow: hidden;

    .tip-model {
        position: relative;
        width: 400px;
        background-color: #fff;
        color: #333;
        border-radius: 5px;
        box-shadow: 1px 2px 3px #333;
        margin: 100px auto;
        overflow: hidden;

        .title {
            height: 44px;
            color: #fff;
            line-height: 44px;
            font-weight: 400;
            font-size: 20px;
            padding: 0 20px;
            box-sizing: border-box;

            &.danger {
                background-color: red;
            }

            &.success {
                background-color: orange;
            }
        }

        .close-btn {
            position: absolute;
            top: 0;
            right: 0;
            color: #fff;
            font-size: 16px;
            background-color: transparent;
            border: none;
            outline: none;
        }
        
        .content {
            padding: 30px 20px;
            box-sizing: border-box;
        }
    }
}
</style>